package itheima05;

import java.util.function.Predicate;
import java.util.stream.Stream;

/*
    Stream流中的常用方法
       抽象方法: 因为获取到的都是Stream的实现类对象,必然覆盖重写抽象方法,所以可以直接调用
       public abstract Stream<T> filter(Predicate<T> predicate): 根据方法参数指定的条件过滤,返回一个新的Stream对象

       参数:是函数是接口,可以传递匿名内部类对象,lambda表达式
             java.util.function.Predicate<T>: 判断型接口
                抽象方法:
                    public abstract boolean test(T t): 根据给定的方法参数T类型的t,返回一个boolean类型的结果

        练习:
            过滤出所有带"娃"的
 */
public class Demo07Filter {
    public static void main(String[] args) {
        Stream<String> s = Stream.of("大娃", "二娃", "三娃", "四娃", "五娃", "六娃", "七娃", "爷爷", "蛇精", "蝎子精");
        //1.匿名内部类对象的方式
        /*Stream<String> s2 = s.filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("娃");
            }
        });*/
        //2.lambda表达式的标准方式
        /*Stream<String> s2 = s.filter((String name) -> {
            return name.contains("娃");
        });*/


        //3.lambda表达式的简化方式
        Stream<String> s2 = s.filter(name -> name.contains("娃"));


        //遍历输出
        s2.forEach((String name)->{
            System.out.println(name);
        });

    }
}
